const config = require('../../utils/config');
const { setUserData, setUserToken } = require('../../model/user');
import { fetchUserDetails } from './user';

function loginWx({ code, nickname, phone }) {
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${config.backendApiUrl}/loginWx`, // 后端微信登录接口
      method: 'POST',
      data: { code, nickname, phone },
      header: {
        "Content-Type": "application/json", // 设置为 JSON 格式
      },
      success: async (res) => {
        if (res.statusCode === 200) {
          const { token } = res.data;
          console.log("token:", token);

          try {
            const storageInfo = wx.getStorageInfoSync();
            console.log('Current storage info:', storageInfo);
            // 保存用户数据到全局
            setUserToken({ token });

            // 获取用户详细信息
            const userDetails = await fetchUserDetails();
            // 保存用户数据到全局
            setUserData({ token:token, userInfo: userDetails });

            resolve({ token, user: userDetails }); // 返回 token 和用户详细信息
          } catch (err) {
            reject(err); // 捕获获取用户信息失败
          }
        } else {
          reject(new Error(res.data.message || '登录失败'));
        }
      },
      fail: (err) => {
        reject(err);
      },
    });
  });
}

function registerWx({ code, nickname, phone, inviteCode }) {
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${config.backendApiUrl}/registerWx`,
      method: 'POST',
      data: { code, nickname, phone, inviteCode },
      header: {
        'Content-Type': 'application/json',
      },
      success: async (res) => {
        if (res.statusCode === 200) {
          const { token } = res.data;

          try {
            // 保存用户数据到全局
            setUserToken({ token });
            
            // 获取用户详细信息
            const userDetails = await fetchUserDetails();

            // 保存用户数据到全局
            setUserData({ token, userInfo: userDetails });

            resolve({ token, user: userDetails }); // 返回 token 和用户详细信息
          } catch (err) {
            reject(err); // 捕获获取用户信息失败
          }
        } else {
          reject(new Error(res.data.message || '注册失败'));
        }
      },
      fail: (err) => {
        reject(err);
      },
    });
  });
}

module.exports = { loginWx, registerWx };
